<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2017 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Free Software" and "Free Software Needs
Free Documentation", with the Front-Cover Texts being "A GNU Manual,"
and with the Back-Cover Texts as in (a) below.

(a) The FSF's Back-Cover Text is: "You are free to copy and modify
this GNU Manual.  Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom." -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Debugging with GDB: Library List Format</title>

<meta name="description" content="Debugging with GDB: Library List Format">
<meta name="keywords" content="Debugging with GDB: Library List Format">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Remote-Protocol.html#Remote-Protocol" rel="up" title="Remote Protocol">
<link href="Library-List-Format-for-SVR4-Targets.html#Library-List-Format-for-SVR4-Targets" rel="next" title="Library List Format for SVR4 Targets">
<link href="File_002dI_002fO-Examples.html#File_002dI_002fO-Examples" rel="prev" title="File-I/O Examples">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Library-List-Format"></a>
<div class="header">
<p>
Next: <a href="Library-List-Format-for-SVR4-Targets.html#Library-List-Format-for-SVR4-Targets" accesskey="n" rel="next">Library List Format for SVR4 Targets</a>, Previous: <a href="File_002dI_002fO-Remote-Protocol-Extension.html#File_002dI_002fO-Remote-Protocol-Extension" accesskey="p" rel="prev">File-I/O Remote Protocol Extension</a>, Up: <a href="Remote-Protocol.html#Remote-Protocol" accesskey="u" rel="up">Remote Protocol</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Library-List-Format-1"></a>
<h3 class="section">E.14 Library List Format</h3>
<a name="index-library-list-format_002c-remote-protocol"></a>

<p>On some platforms, a dynamic loader (e.g. <samp>ld.so</samp>) runs in the
same process as your application to manage libraries.  In this case,
<small>GDB</small> can use the loader&rsquo;s symbol table and normal memory
operations to maintain a list of shared libraries.  On other
platforms, the operating system manages loaded libraries.
<small>GDB</small> can not retrieve the list of currently loaded libraries
through memory operations, so it uses the &lsquo;<samp>qXfer:libraries:read</samp>&rsquo;
packet (see <a href="General-Query-Packets.html#qXfer-library-list-read">qXfer library list read</a>) instead.  The remote stub
queries the target&rsquo;s operating system and reports which libraries
are loaded.
</p>
<p>The &lsquo;<samp>qXfer:libraries:read</samp>&rsquo; packet returns an XML document which
lists loaded libraries and their offsets.  Each library has an
associated name and one or more segment or section base addresses,
which report where the library was loaded in memory.
</p>
<p>For the common case of libraries that are fully linked binaries, the
library should have a list of segments.  If the target supports
dynamic linking of a relocatable object file, its library XML element
should instead include a list of allocated sections.  The segment or
section bases are start addresses, not relocation offsets; they do not
depend on the library&rsquo;s link-time base addresses.
</p>
<p><small>GDB</small> must be linked with the Expat library to support XML
library lists.  See <a href="Requirements.html#Expat">Expat</a>.
</p>
<p>A simple memory map, with one loaded library relocated by a single
offset, looks like this:
</p>
<div class="smallexample">
<pre class="smallexample">&lt;library-list&gt;
  &lt;library name=&quot;/lib/libc.so.6&quot;&gt;
    &lt;segment address=&quot;0x10000000&quot;/&gt;
  &lt;/library&gt;
&lt;/library-list&gt;
</pre></div>

<p>Another simple memory map, with one loaded library with three
allocated sections (.text, .data, .bss), looks like this:
</p>
<div class="smallexample">
<pre class="smallexample">&lt;library-list&gt;
  &lt;library name=&quot;sharedlib.o&quot;&gt;
    &lt;section address=&quot;0x10000000&quot;/&gt;
    &lt;section address=&quot;0x20000000&quot;/&gt;
    &lt;section address=&quot;0x30000000&quot;/&gt;
  &lt;/library&gt;
&lt;/library-list&gt;
</pre></div>

<p>The format of a library list is described by this DTD:
</p>
<div class="smallexample">
<pre class="smallexample">&lt;!-- library-list: Root element with versioning --&gt;
&lt;!ELEMENT library-list  (library)*&gt;
&lt;!ATTLIST library-list  version CDATA   #FIXED  &quot;1.0&quot;&gt;
&lt;!ELEMENT library       (segment*, section*)&gt;
&lt;!ATTLIST library       name    CDATA   #REQUIRED&gt;
&lt;!ELEMENT segment       EMPTY&gt;
&lt;!ATTLIST segment       address CDATA   #REQUIRED&gt;
&lt;!ELEMENT section       EMPTY&gt;
&lt;!ATTLIST section       address CDATA   #REQUIRED&gt;
</pre></div>

<p>In addition, segments and section descriptors cannot be mixed within a
single library element, and you must supply at least one segment or
section for each library.
</p>
<hr>
<div class="header">
<p>
Next: <a href="Library-List-Format-for-SVR4-Targets.html#Library-List-Format-for-SVR4-Targets" accesskey="n" rel="next">Library List Format for SVR4 Targets</a>, Previous: <a href="File_002dI_002fO-Remote-Protocol-Extension.html#File_002dI_002fO-Remote-Protocol-Extension" accesskey="p" rel="prev">File-I/O Remote Protocol Extension</a>, Up: <a href="Remote-Protocol.html#Remote-Protocol" accesskey="u" rel="up">Remote Protocol</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>
